<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    div {
        position: absolute;
        width: 100px;
        height: 100px;
        background-color: pink;

    }
</style>

<body>
    <div></div>
    <script>
        function animate(obj, target, callback) {
            // 清除自身原先的定时器，防止多次点击事件导致定时器嵌套定时器
            clearInterval(obj.timer);
            // 给不同的元素指定不同的定时器，便于管理
            obj.timer = setInterval(function () {
                //设置步数
                var step = Math.ceil((target - obj.offsetLeft) / 10);
                //判断方向，取整不一样
                step > 0 ? Math.ceil(step) : Math.floor(step);
                if (obj.offsetLeft == target) {
                    clearInterval(obj.timer);
                    // 定时器结束后判断是否有回调函数，然后执行
                    if (callback) {
                        callback();
                    }
                } else {
                    // 设置减速运动，步长公式
                    obj.style.left = obj.offsetLeft + step + 'px';
                }
            }, 30)
        }
        var div = document.querySelector('div');
        animate(div, 400, function () {
            alert('hello');
        });
    </script>
</body>

</html>